Event Sourcing
ES
状態を永続化するのではなく、Eventを永続化する
起きたイベントを全て記録する
タイムトラベルできる
エラーが発生したときにもその直前まで戻ればいい
テストケースと一緒に、行うイベントと結果を用意すれば自動でテストできる
財務、金融、保険などの業界では、最新の状態が知りたいんじゃなくて、行われた手続きが知りたいんだよね、的な
大雑把な構成としてはこのような感じ
https://gyazo.com/a71e166ab309574bc7bb7580f287783d
更新系では、
参照系では
Event HandlerがEventを処理してAggregate等を作る
Event Handlerは、Eventをfoldして値を復元する
https://gyazo.com/b56dda8c12a99297c39b137cc12c05e6
この3つの図だけで知りたいことほぼ知れた感あるmrsekut.icon
ESの問題点
最新の状態を得るためには全てのイベントをリプレイしないといけない
イベントを全て記録するのでストレージを圧迫しそう
仕様変更されたら、大量の過去のイベントにも影響が出る
「特定の名前を検出する」というクエリを実行するとテーブルのフルスキャンをすることになってしまう
これは読み込みから書き込みを分離して,そのようなクエリでは別途最適化した読み込みモデルを使用するという,CQRSが面白くなってくる部分でもある。ref 具体例
commitをEventと捉えるならGit
参考